Avoid unintended side-effect in gdk_window_get_events
authorMatthias Clasen <mclasen@redhat.com>
Sun, 10 May 2009 06:08:41 +0000 (02:08 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Sun, 10 May 2009 06:08:41 +0000 (02:08 -0400)
Calling gdk_window_get_events() had the side-effect of letting
property change notification through to the application, which
was not intended. Now we keep StructureNotify and PropertyNotify
filtered out when they were before. Reported in bug 582003.

gdk/x11/gdkwindow-x11.c

index 82966743c999e553521ccbc407028fbb2603cc39..77033fea76def58b7df3c226ec17349dd9dcbb7d 100644 (file)
@@ -3538,18 +3538,20 @@ gdk_window_x11_get_events (GdkWindow *window)
 {
   XWindowAttributes attrs;
   GdkEventMask event_mask;
+  GdkEventMask filtered;
 
   if (GDK_WINDOW_DESTROYED (window))
     return 0;
   else
     {
       XGetWindowAttributes (GDK_WINDOW_XDISPLAY (window),
-                           GDK_WINDOW_XID (window), 
+                           GDK_WINDOW_XID (window),
                            &attrs);
-      
       event_mask = x_event_mask_to_gdk_event_mask (attrs.your_event_mask);
-      GDK_WINDOW_OBJECT (window)->event_mask = event_mask;
-  
+      /* if property change was filtered out before, keep it filtered out */
+      filtered = GDK_STRUCTURE_MASK | GDK_PROPERTY_CHANGE_MASK;
+      GDK_WINDOW_OBJECT (window)->event_mask = event_mask & ((GDK_WINDOW_OBJECT (window)->event_mask & filtered) | ~filtered);
+
       return event_mask;
     }
 }